package com.xinchao.service;

import com.xinchao.exception.ServiceException;
import com.xinchao.model.Role;
import com.xinchao.model.User;
import com.xinchao.model.page.PageInfo;
import com.xinchao.model.vo.RoleListVO;
import com.xinchao.model.vo.RoleSelectListVO;

import javax.servlet.http.HttpServletRequest;
import java.rmi.ServerException;
import java.util.List;

/**
 * 角色Service
 *
 * @author dxy
 * @date 2018/6/22 10:35
 */
public interface RoleService {
	/**
	 * 保存角色
	 *
	 * @param role      Role
	 * @param moduleIds 模块IDS
	 * @param request   HttpServletRequest
	 * @return long(主键)
	 */
	void insertRole(Role role, String moduleIds, HttpServletRequest request) throws ServerException;

	/**
	 * 修改角色
	 *
	 * @param role      Role
	 * @param moduleIds 模块IDS
	 * @param request   HttpServletRequest
	 */
	void updateRole(Role role, String moduleIds, HttpServletRequest request) throws ServerException;

	/**
	 * 保存角色模块关系
	 *
	 * @param roleId    角色ID
	 * @param moduleIds 模块IDS
	 */
	void insertRoleModule(Long roleId, String moduleIds) throws ServerException;

	/**
	 * 根据角色名称获取角色
	 *
	 * @param roleName    角色名称
	 * @return Role(角色)
	 */
	Role getRoleByRoleName(String roleName);

	/**
	 * 获取角色列表
	 *
	 * @param status      状态
	 * @param roleName    角色名称
	 * @param pageNum     当前页
	 * @param pageSize    条数
	 * @return PageInfo<RoleListVO>
	 */
	PageInfo<RoleListVO> listRole(Integer status, String roleName, Integer pageNum, Integer pageSize);

	/**
	 * 获取所有角色列表
	 *
	 * @return List<RoleSelectListVO>
	 */
	List<RoleSelectListVO> listRoleSelect();

	/**
	 * 获取角色拥有的权限名称
	 *
	 * @param roleId 角色ID
	 * @return List<String>
	 */
	List<String> listModuleNamesByRoleId(Long roleId) throws ServiceException;

	/**
	 * 根据角色Id获取拥有的权限Id
	 * @param roleId
	 * @return
	 */
	List<String> listModuleIdsByRoleId(Long roleId) throws ServiceException;

	/**
	 * 启用禁用角色
	 *
	 * @param roleId  角色ID
	 * @param status  状态
	 * @param request HttpServletRequest
	 */
	void enableDisableRole(Long roleId, Integer status, HttpServletRequest request) throws ServerException;

	/**
	 * 批量启用角色
	 * @param ids 角色id（多个英文逗号隔开）
	 * @param status 状态
	 * @param loginUser 登录用户
	 * @param ip 登录用户的ip
	 * @author linqiang
	 */
    void batchAbleDisable(String ids, Integer status, User loginUser, String ip) throws ServiceException;
}
